5. 装饰器 Decorator
装饰器是 Python 的一个高级特性,其基于高阶函数,形式如下所示:
@<装饰器函数名>
def func(args,...):
...
其等同于如下的写法:
def func(args,...):
...
func = <装饰器函数>(func)
装饰器可以用于跟踪运行时函数的调用情况,例如我们可以使用如下的跟踪函数用作装饰器:
def tracer_1args(fn):
def tracer(x):
print("Calling function", fn, "on argument", x)
return fn(x)
return tracer
示例
@tracer_1args
def square(x):
return x*x
@tracer_1args
def sum_of_squares(N):
sum = 0
for i in range(1,N+1):
sum += square(i)
return sum
>>> sum_of_squares(5)
Calling function <function sum_of_squares at 0x00000159B6965260> on argument 5
Calling function <function square at 0x00000159B6965120> on argument 1
Calling function <function square at 0x00000159B6965120> on argument 2
Calling function <function square at 0x00000159B6965120> on argument 3
Calling function <function square at 0x00000159B6965120> on argument 4
Calling function <function square at 0x00000159B6965120> on argument 5
55